export const InputType = {
  Number: 'number', // 数字
  NumberAndDecimal: 'numberAndDecimal', // 数字+小数
  NumberAndDecimal2: 'numberAndDecimal2', // 数字+两位小数
  NumberAndLetter: 'numberAndLetter', // 数字+字母
  Customize: 'customize' // 自定义, 由data-rule提供规则
}

export const inputChange = (type, item, key, customize) => {
  switch (type) {
    case InputType.Number:
      item[key] = item[key].replace(/\D]/g, '')
      break
    case InputType.NumberAndDecimal:
      item[key] = item[key].replace(/[^\d.]/g, '') // 清除数字和'.'以外的字符
      item[key] = item[key].replace(/\.{2,}/g, '.') // 连续两个'.', 只保留第一个'.'
      item[key] = item[key]
        .replace('.', '$#$')
        .replace(/\./g, '')
        .replace('$#$', '.') // 隔着字符, 也保证只有一个'.'
      item[key].indexOf('.') < 0 &&
      item[key] !== '' &&
      (item[key] = parseFloat(item[key])) // 保证不会出现重复的: 00, 01, 02 ...
      item[key].indexOf('.') > -1 && item[key].length === 1 && (item[key] = '') // 第一位不能以'.'开头
      break
    case InputType.NumberAndDecimal2:
      if (item[key] && item[key].length && item[key] !== null) {
        item[key] += ''
        item[key] = item[key].replace(/[^\d.]/g, '')
        item[key] = item[key].replace(/^\./g, '')
        item[key] = item[key].replace(/\.{2,}/g, '.')
        item[key] = item[key]
          .replace('.', '$#$')
          .replace(/\./g, '')
          .replace('$#$', '.')
      }
      break
    case InputType.NumberAndLetter:
      item[key] = item[key].replace(/[\W]/g, '')
      break
    case InputType.Customize:
      const rule = customize && eval(customize) // 字符串正则转正则表达式
      item[key] = item[key].replace(rule, '')
      break
  }
}
